package com.tools.hry.utils;

import com.tools.hry.xls.exception.ExcelContentInvalidException;
import com.tools.hry.xls.exception.ExcelParseException;
import com.tools.hry.xls.exception.ExcelRegexpValidFailedException;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

/**
 * Created by 峥桂 on 2017/9/5.
 */
public class BaseUtils {
    /**
     * 转换驼峰命名方式
     *
     * @param name
     * @return
     */
    public static String toCapitalizeCamelCase(String name) {
        if (name == null) {
            return null;
        }

        boolean upperCase = false;
        StringBuilder sb = new StringBuilder(name.length());
        for (int i = 0; i < name.length(); i++) {
            char c = name.charAt(i);
            if (c == '_') {
                upperCase = true;
            } else if (upperCase) {
                upperCase = false;
                sb.append(Character.toUpperCase(c));
            } else {
                sb.append(c);
            }
        }
        name = sb.toString();
        return name.substring(0, 1).toUpperCase() + name.substring(1);
    }


    public static Map<?, ?> objectToMap(Object obj) {
        if(obj == null)
            return null;
        return new org.apache.commons.beanutils.BeanMap(obj);
    }

//    BigDecimal.setScale()方法用于格式化小数点
//    setScale(1)表示保留一位小数，默认用四舍五入方式
//    setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位，如2.35会变成2.3
//    setScale(1,BigDecimal.ROUND_UP)进位处理，2.35变成2.4
//    setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入，2.35变成2.4
//    setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入，2.35变成2.3，如果是5则向
    public static Object handleFieldTypeValue(String typeName,String value) throws
            ExcelParseException {
        if(StringUtils.isBlank(value)){
            return "";
        }
        // 字符串
        if ("java.lang.String".equals(typeName)) {
            return value;
        }
        // 整形
        if ("java.lang.Double".equals(typeName) || "double".equals(typeName)) {
            return new BigDecimal(value).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
        }
        // 长整形
        if ("java.lang.Long".equals(typeName) || "long".equals(typeName)) {
            return Long.parseLong(value);
        }
        // 整形
        if ("java.lang.Integer".equals(typeName) || "int".equals(typeName)) {
            return Integer.parseInt(value);
        }
//        // 整形
        if ("java.math.BigDecimal".equals(typeName)) {
            return new BigDecimal(value).setScale(3,BigDecimal.ROUND_HALF_UP);
        }
        // 短整型
        if ("java.lang.Short".equals(typeName) || "short".equals(typeName)) {
            return Short.parseShort(value);
        }
        // Date型
        if ("java.util.Date".equals(typeName) || "java.sql.Timestamp".equals(typeName)) {
            return DateUtils.format(DateUtils.parse(value));
//            SimpleDateFormat dateFormat=  new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//            return dateFormat.format(new Date(value));
        }
        // Char型
        if ("java.lang.Character".equals(typeName) || "char".equals(typeName)) {
            if (value.length() == 1) {
                return value.charAt(0);
            }
        }
        throw new ExcelParseException("不支持的字段类型 " + typeName + " !");
    }
}
